package org.aplombh.java.awcing.basic.struct.queue;

import java.util.Stack;


/**
 * 入队加在队尾，按正常顺序
 * 出队要出队头，所以栈中元素得逆序，放入out中，然后再出栈  -  出队
 * 之后入队，要加在队尾，又得将元素逆序，放入in中，然后入栈  -  入队
 * @param <E>
 */
public class QueueByStack<E> {
    private final Stack<E> in = new Stack<E>();
    private final Stack<E> out = new Stack<E>();

    //判断队列是否为空
    public boolean isEmpty() {
        return in.size() == 0 && (out.size() == 0);
    }

    //入队
    public void offer(E e) {
        // 将out中所有数压入in中
        while (!out.empty()) {
            in.push(out.pop());
        }
        //入栈
        in.push(e);
    }

    //出队
    public E poll() {
        // 将in中所有数压入out中
        while (!in.empty()) {
            out.push(in.pop());
        }
        return out.pop();
    }

}